package com.bawei.image.loader

import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.widget.ImageView
import com.bawei.image.IImageLoader
import com.bawei.image.ImageOptions
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.CircleCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import java.io.File
import java.lang.ref.SoftReference

/**
 * 作者：Jason
 * 日期：2023/10/18
 * 描述：Glide图片加载器
 */
class GlideImageLoader : IImageLoader {
    override fun loadFileIntoImageView(
        context: Context,
        file: File,
        target: ImageView,
        options: ImageOptions
    ) {
        loadImageView(context, file, target, options)
    }

    override fun loadResourceIntoImageView(
        context: Context,
        resource: Int,
        target: ImageView,
        options: ImageOptions
    ) {
        loadImageView(context, resource, target, options)
    }

    override fun loadUriIntoImageView(
        context: Context,
        uri: Uri,
        target: ImageView,
        options: ImageOptions
    ) {
        loadImageView(context, uri, target, options)
    }

    override fun loadByteArrayIntoImageView(
        context: Context,
        bytes: ByteArray,
        target: ImageView,
        options: ImageOptions
    ) {
        loadImageView(context, bytes, target, options)
    }

    override fun loadUrlIntoImageView(
        context: Context,
        url: String,
        target: ImageView,
        options: ImageOptions
    ) {
        loadImageView(context, url, target, options)
    }

    private fun loadImageView(context: Context, source: Any, target: ImageView, options: ImageOptions) {
        var softRef = SoftReference(context)
        softRef.get()?.apply {
            var requestBuilder = Glide.with(this).asDrawable().load(source) //使用Drawable而不是Bitmap, 减少图片资源大小
            //设置加载占位图
//            if (options.placeImage > 0) {
//                requestBuilder.placeholder(options.placeImage)
//            }
            //加载占位图使用Drawable, 减少资源大小
            requestBuilder.placeholder(ColorDrawable(Color.WHITE))
            //设置加载错误占位图
//            if (options.errorImage > 0) {
//                requestBuilder.error(options.errorImage)
//            }
            //错误站位图使用Drawable, 减少资源大小
            requestBuilder.error(ColorDrawable(Color.LTGRAY))

            //是否加载图片第一帧（GIF ---> PNG）
            if (options.isGif && options.isStaticImg) {

            }

            //设置是否屏蔽内存缓存
            if (options.skipMemoryCache) {
                requestBuilder.skipMemoryCache(true)
            }

            //设置是否屏蔽磁盘缓存
            if (options.skipDiskCache) {
                //磁盘缓存的策略：
                //DiskCacheStrategy.NONE（不缓存）
                //DiskCacheStrategy.ALL(所有图片都缓存)
                //DiskCacheStrategy.RESOURCE(图片解码的资源缓存)
                //DiskCacheStrategy.DATA(图片解码前的数据缓存)
                //DiskCacheStrategy.AUTOMATIC(自动缓存)
                requestBuilder.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
            }

            //设置图片大小
            if (options.imgSize.size != 2) {
                throw IllegalArgumentException("图片大小数组参数的大小必须为2")
            } else {
                requestBuilder.submit(options.imgSize[0], options.imgSize[1])
            }

            //设置圆形图片
            if (options.isCircle) {
                requestBuilder.transform(CenterCrop(), CircleCrop())
            }

            //设置圆角图片
            if (options.roundRadius > 0) {
                requestBuilder.transform(CenterCrop(), RoundedCorners(options.roundRadius))
            }

            //将图片设置到ImageView
            requestBuilder.into(target)
        }
    }


}